// 通用 API 客户端
import axios from 'axios'
import config from '../config'

// 创建 axios 实例
const apiClient = axios.create({
  baseURL: config.API_BASE_URL,
  timeout: config.API_TIMEOUT,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器：附加认证 Token
apiClient.interceptors.request.use(
  (requestConfig) => {
    try {
      const token = localStorage.getItem('token')
      if (token) {
        requestConfig.headers.Authorization = `Bearer ${token}`
      }
    } catch (e) { /* empty by intention */ }
    return requestConfig
  },
  (error) => Promise.reject(error)
)

// 响应拦截器：统一返回 data，并使用ApiErrorHandler处理错误
apiClient.interceptors.response.use(
  (response) => response.data,
  async (error) => {
    // 使用统一的错误处理中心
    try {
      const { ApiErrorHandler } = await import('../utils/apiErrorHandler')
      const { useRouter } = await import('vue-router')
      const { useAuthStore } = await import('../store/auth')
      
      const router = useRouter()
      const authStore = useAuthStore()
      
      return await ApiErrorHandler.handleError(error, router, authStore, error.config)
    } catch (handlerError) {
      // 降级方案：如果统一错误处理失败，使用原有逻辑
      console.error('错误处理器加载失败，使用降级方案:', handlerError)
      
      if (!error.response) return Promise.reject(error)
      
      const { status, data } = error.response
      const normalizedError = new Error(data?.message || error.message || 'REQUEST_FAILED')
      normalizedError.status = status
      return Promise.reject(normalizedError)
    }
  }
)

export default apiClient


